gtk: Stop using modifier intents
authorMatthias Clasen <mclasen@redhat.com>
Sun, 5 Apr 2020 23:52:25 +0000 (19:52 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 6 Apr 2020 20:32:03 +0000 (16:32 -0400)
Reviewing the existing settings, the only backend with
some differences in the modifier intent settings is OS X,
and we would rather have that implemented by interpreting
the existing modifiers in the appropriate way.

                X11      Wayland  Win32    OS X

primary         ctrl     ctrl     ctrl     mod2
mnemonic        alt      alt      alt      alt
context menu    -        -        -        ctrl
extend sel      shift    shift    shift    shift
modify sel      ctrl     ctrl     ctrl     mod2
no text         alt|ctrl alt|ctrl alt|ctrl mod2|ctrl
shift group     varies   -        -        alt

GTK now uses the following modifiers:

primary         ctrl
mnemonic        alt
extend sel      shift
modify sel      ctrl
no text         alt|ctrl

The context menu and shift group intents were not used
in GTK at all.

Update tests to no longer expect <Primary> to roundtrip
through the accelerator parsing and formatting code.

14 files changed:
gtk/gtkaccelgroup.c
gtk/gtkflowbox.c
gtk/gtkiconview.c
gtk/gtkimcontextsimple.c
gtk/gtkimmulticontext.c
gtk/gtklistbox.c
gtk/gtkprivate.c
gtk/gtkprivate.h
gtk/gtktext.c
gtk/gtktextview.c
gtk/gtktreeview.c
gtk/inspector/object-tree.c
gtk/inspector/resource-list.c
testsuite/gtk/accel.c

index 6ffa6f889871c562b3cbeef2ddff6c1c0d100f4e..cd85742829d57bd4c13b1f154c009f7fff360408 100644 (file)
  */
 
 /* --- variables --- */
-static guint  default_accel_mod_mask     = 0;
+static guint default_accel_mod_mask = GDK_CONTROL_MASK|
+                                      GDK_SHIFT_MASK|
+                                      GDK_ALT_MASK|
+                                      GDK_SUPER_MASK|
+                                      GDK_HYPER_MASK|
+                                      GDK_META_MASK;
 
 
 /* --- functions --- */
@@ -276,7 +281,6 @@ gtk_accelerator_parse_with_keycode (const gchar     *accelerator,
   GdkModifierType mods;
   gint len;
   gboolean error;
-  GdkModifierType primary;
 
   if (accelerator_key)
     *accelerator_key = 0;
@@ -290,9 +294,6 @@ gtk_accelerator_parse_with_keycode (const gchar     *accelerator,
   if (!display)
     display = gdk_display_get_default ();
 
-  primary = gdk_display_get_modifier_mask (display,
-                                           GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR);
-
   error = FALSE;
   keyval = 0;
   mods = 0;
@@ -305,7 +306,7 @@ gtk_accelerator_parse_with_keycode (const gchar     *accelerator,
             {
               accelerator += 9;
               len -= 9;
-              mods |= primary;
+              mods |= GDK_CONTROL_MASK;
             }
           else if (len >= 9 && is_control (accelerator))
             {
@@ -578,7 +579,6 @@ gchar*
 gtk_accelerator_name (guint           accelerator_key,
                       GdkModifierType accelerator_mods)
 {
-  static const gchar text_primary[] = "<Primary>";
   static const gchar text_shift[] = "<Shift>";
   static const gchar text_control[] = "<Control>";
   static const gchar text_alt[] = "<Alt>";
@@ -589,10 +589,6 @@ gtk_accelerator_name (guint           accelerator_key,
   guint l;
   const char *keyval_name;
   gchar *accelerator;
-  GdkModifierType primary;
-
-  primary = gdk_display_get_modifier_mask (gdk_display_get_default (),
-                                           GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR);
 
   accelerator_mods &= GDK_MODIFIER_MASK;
 
@@ -602,11 +598,6 @@ gtk_accelerator_name (guint           accelerator_key,
 
   saved_mods = accelerator_mods;
   l = 0;
-  if (accelerator_mods & primary)
-    {
-      l += sizeof (text_primary) - 1;
-      accelerator_mods &= ~primary; /* consume the default accel */
-    }
   if (accelerator_mods & GDK_SHIFT_MASK)
     l += sizeof (text_shift) - 1;
   if (accelerator_mods & GDK_CONTROL_MASK)
@@ -625,12 +616,6 @@ gtk_accelerator_name (guint           accelerator_key,
   accelerator_mods = saved_mods;
   l = 0;
   accelerator[l] = 0;
-  if (accelerator_mods & primary)
-    {
-      strcpy (accelerator + l, text_primary);
-      l += sizeof (text_primary) - 1;
-      accelerator_mods &= ~primary; /* consume the default accel */
-    }
   if (accelerator_mods & GDK_SHIFT_MASK)
     {
       strcpy (accelerator + l, text_shift);
@@ -1045,19 +1030,5 @@ gtk_accelerator_set_default_mod_mask (GdkModifierType default_mod_mask)
 GdkModifierType
 gtk_accelerator_get_default_mod_mask (void)
 {
-  if (!default_accel_mod_mask)
-    {
-      GdkDisplay *display;
-
-      display = gdk_display_get_default ();
-
-      if (!display)
-        return GDK_CONTROL_MASK | GDK_SHIFT_MASK | GDK_ALT_MASK;
-
-      default_accel_mod_mask =
-          gdk_display_get_modifier_mask (display,
-                                         GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK);
-    }
-
   return default_accel_mod_mask;
 }
index ded20adb33551ccbd8a3c1ba10c059668c49a024..73214fb90f4715516b8407fc2e107b136dd4fb40 100644 (file)
@@ -142,10 +142,10 @@ get_current_selection_modifiers (GtkWidget *widget,
 
   if (gtk_get_current_event_state (&state))
     {
-      mask = gtk_widget_get_modifier_mask (widget, GDK_MODIFIER_INTENT_MODIFY_SELECTION);
+      mask = GDK_CONTROL_MASK;
       if ((state & mask) == mask)
         *modify = TRUE;
-      mask = gtk_widget_get_modifier_mask (widget, GDK_MODIFIER_INTENT_EXTEND_SELECTION);
+      mask = GDK_SHIFT_MASK;
       if ((state & mask) == mask)
         *extend = TRUE;
     }
@@ -2992,19 +2992,9 @@ gtk_flow_box_add_move_binding (GtkWidgetClass  *widget_class,
                                GtkMovementStep  step,
                                gint             count)
 {
-  GdkDisplay *display;
   GdkModifierType extend_mod_mask = GDK_SHIFT_MASK;
   GdkModifierType modify_mod_mask = GDK_CONTROL_MASK;
 
-  display = gdk_display_get_default ();
-  if (display != NULL)
-    {
-      extend_mod_mask = gdk_display_get_modifier_mask (display,
-                                                        GDK_MODIFIER_INTENT_EXTEND_SELECTION);
-      modify_mod_mask = gdk_display_get_modifier_mask (display,
-                                                       GDK_MODIFIER_INTENT_MODIFY_SELECTION);
-    }
-
   gtk_widget_class_add_binding_signal (widget_class,
                                        keyval, modmask,
                                        "move-cursor",
index f3bb6ead981245c6d03b01a1cdfd85caa106302f..275b59867567a210f9d4ae221ceebc6c55cb9bc5 100644 (file)
@@ -2125,7 +2125,7 @@ gtk_icon_view_button_press (GtkGestureClick *gesture,
   GtkCellRenderer *cell = NULL, *cursor_cell = NULL;
   int button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
   GdkEventSequence *sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
-  GdkEventButton *event = (GdkEventButton *)gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence);
+  GdkEvent *event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence);
   GdkModifierType state;
 
   if (!gtk_widget_has_focus (widget))
@@ -2133,15 +2133,10 @@ gtk_icon_view_button_press (GtkGestureClick *gesture,
 
   if (button == GDK_BUTTON_PRIMARY)
     {
-      GdkModifierType extend_mod_mask;
-      GdkModifierType modify_mod_mask;
-
-      state = gdk_event_get_modifier_state ((GdkEvent *)event);
-      extend_mod_mask =
-        gtk_widget_get_modifier_mask (widget, GDK_MODIFIER_INTENT_EXTEND_SELECTION);
+      GdkModifierType extend_mod_mask = GDK_SHIFT_MASK;
+      GdkModifierType modify_mod_mask = GDK_CONTROL_MASK;
 
-      modify_mod_mask =
-        gtk_widget_get_modifier_mask (widget, GDK_MODIFIER_INTENT_MODIFY_SELECTION);
+      state = gdk_event_get_modifier_state (event);
 
       item = _gtk_icon_view_get_item_at_widget_coords (icon_view,
                                                        x, y,
@@ -3468,15 +3463,8 @@ gtk_icon_view_real_move_cursor (GtkIconView     *icon_view,
 
   if (gtk_get_current_event_state (&state))
     {
-      GdkModifierType extend_mod_mask;
-      GdkModifierType modify_mod_mask;
-
-      extend_mod_mask =
-        gtk_widget_get_modifier_mask (GTK_WIDGET (icon_view),
-                                      GDK_MODIFIER_INTENT_EXTEND_SELECTION);
-      modify_mod_mask =
-        gtk_widget_get_modifier_mask (GTK_WIDGET (icon_view),
-                                      GDK_MODIFIER_INTENT_MODIFY_SELECTION);
+      GdkModifierType extend_mod_mask = GDK_SHIFT_MASK;
+      GdkModifierType modify_mod_mask = GDK_CONTROL_MASK;
 
       if ((state & modify_mod_mask) == modify_mod_mask)
         icon_view->priv->modify_selection_pressed = TRUE;
index 1e5bfac6c07957d1e2f7efe6507c4856d0eb2937..169d9333e927976efdc93667f5dba5bb77027910 100644 (file)
@@ -1034,7 +1034,6 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context,
   GtkIMContextSimple *context_simple = GTK_IM_CONTEXT_SIMPLE (context);
   GtkIMContextSimplePrivate *priv = context_simple->priv;
   GdkSurface *surface = gdk_event_get_surface ((GdkEvent *) event);
-  GdkDisplay *display = gdk_surface_get_display (surface);
   GSList *tmp_list;
   int n_compose = 0;
   GdkModifierType hex_mod_mask;
@@ -1100,8 +1099,7 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context,
     if (keyval == gtk_compose_ignore[i])
       return FALSE;
 
-  hex_mod_mask = gdk_display_get_modifier_mask (display, GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR);
-  hex_mod_mask |= GDK_SHIFT_MASK;
+  hex_mod_mask = GDK_CONTROL_MASK|GDK_SHIFT_MASK;
 
   if (priv->in_hex_sequence && priv->modifiers_dropped)
     have_hex_mods = TRUE;
@@ -1132,7 +1130,7 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context,
     {
       GdkModifierType no_text_input_mask;
 
-      no_text_input_mask = gdk_display_get_modifier_mask (display, GDK_MODIFIER_INTENT_NO_TEXT_INPUT);
+      no_text_input_mask = GDK_ALT_MASK|GDK_CONTROL_MASK;
 
       if (state & no_text_input_mask ||
          (priv->in_hex_sequence && priv->modifiers_dropped &&
index 0c85cd0a079a702ed52ae7e2663173906344e83b..2d2768e026486faa8aa0bdbf1dc1e3a805126c5b 100644 (file)
@@ -361,16 +361,12 @@ gtk_im_multicontext_filter_keypress (GtkIMContext *context,
     }
   else
     {
-      GdkDisplay *display;
       GdkModifierType no_text_input_mask;
 
       keyval = gdk_key_event_get_keyval (event);
       state = gdk_event_get_modifier_state (event);
-      display = gdk_event_get_display (event);
 
-      no_text_input_mask =
-        gdk_display_get_modifier_mask (display,
-                                       GDK_MODIFIER_INTENT_NO_TEXT_INPUT);
+      no_text_input_mask = GDK_ALT_MASK|GDK_CONTROL_MASK;
 
       if (gdk_event_get_event_type (event) == GDK_KEY_PRESS &&
           (state & no_text_input_mask) == 0)
index 81669abbc875f346138c221330b7916d6b5680e7..bae24231cd63087309e9f6dbd9fbc0e5c6b036ee 100644 (file)
@@ -1425,19 +1425,9 @@ gtk_list_box_add_move_binding (GtkWidgetClass  *widget_class,
                                GtkMovementStep  step,
                                gint             count)
 {
-  GdkDisplay *display;
   GdkModifierType extend_mod_mask = GDK_SHIFT_MASK;
   GdkModifierType modify_mod_mask = GDK_CONTROL_MASK;
 
-  display = gdk_display_get_default ();
-  if (display)
-    {
-      extend_mod_mask = gdk_display_get_modifier_mask (display,
-                                                       GDK_MODIFIER_INTENT_EXTEND_SELECTION);
-      modify_mod_mask = gdk_display_get_modifier_mask (display,
-                                                       GDK_MODIFIER_INTENT_MODIFY_SELECTION);
-    }
-
   gtk_widget_class_add_binding_signal (widget_class,
                                        keyval, modmask,
                                        "move-cursor",
@@ -1786,10 +1776,10 @@ get_current_selection_modifiers (GtkWidget *widget,
 
   if (gtk_get_current_event_state (&state))
     {
-      mask = gtk_widget_get_modifier_mask (widget, GDK_MODIFIER_INTENT_MODIFY_SELECTION);
+      mask = GDK_CONTROL_MASK;
       if ((state & mask) == mask)
         *modify = TRUE;
-      mask = gtk_widget_get_modifier_mask (widget, GDK_MODIFIER_INTENT_EXTEND_SELECTION);
+      mask = GDK_SHIFT_MASK;
       if ((state & mask) == mask)
         *extend = TRUE;
     }
index 05aba4aaf57fb7b86ae054feba33ad368114c511..105cf4a8cea9ccc94446bfe746ebc83274c89d33 100644 (file)
@@ -158,22 +158,6 @@ _gtk_single_string_accumulator (GSignalInvocationHint *ihint,
   return continue_emission;
 }
 
-GdkModifierType
-_gtk_get_primary_accel_mod (void)
-{
-  static GdkModifierType primary = 0;
-
-  if (! primary)
-    {
-      GdkDisplay *display = gdk_display_get_default ();
-
-      primary = gdk_display_get_modifier_mask (display,
-                                               GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR);
-    }
-
-  return primary;
-}
-
 static gpointer
 register_resources (gpointer data)
 {
index 4a29a6ea8f7a0ac1309848b9c5d8b225a8e4a94d..9e8300d1a306f5db8662dae11e072c6a6853e50c 100644 (file)
@@ -82,8 +82,6 @@ gboolean _gtk_single_string_accumulator   (GSignalInvocationHint *ihint,
                                            const GValue          *handler_return,
                                            gpointer               dummy);
 
-GdkModifierType _gtk_get_primary_accel_mod     (void);
-
 gboolean         gtk_propagate_event_internal  (GtkWidget       *widget,
                                                 GdkEvent        *event,
                                                 GtkWidget       *topmost);
index b1300d2c05d1eaae6ef6bd900fdddacd1400a45f..7908e31119c3ee4ba4e33c4ef0fddff68e4050f7 100644 (file)
@@ -2657,7 +2657,6 @@ gtk_text_click_gesture_pressed (GtkGestureClick *gesture,
       gboolean have_selection;
       gboolean is_touchscreen, extend_selection;
       GdkDevice *source;
-      guint state;
 
       sel_start = priv->selection_bound;
       sel_end = priv->current_pos;
@@ -2673,12 +2672,7 @@ gtk_text_click_gesture_pressed (GtkGestureClick *gesture,
       priv->select_words = FALSE;
       priv->select_lines = FALSE;
 
-      state = gdk_event_get_modifier_state (event);
-
-      extend_selection =
-        (state &
-         gtk_widget_get_modifier_mask (widget,
-                                       GDK_MODIFIER_INTENT_EXTEND_SELECTION));
+      extend_selection = GDK_SHIFT_MASK;
 
       /* Always emit reset when preedit is shown */
       priv->need_im_reset = TRUE;
index 8b91a7aaf3b044bbb3a9d074c8ab7bfbff4fd215..dd0bbe71dd9c22e3d76036afeee55c79ebf68ae8 100644 (file)
@@ -5373,9 +5373,7 @@ gtk_text_view_click_gesture_pressed (GtkGestureClick *gesture,
 
       state = gdk_event_get_modifier_state (event);
 
-      if (state &
-          gtk_widget_get_modifier_mask (GTK_WIDGET (text_view),
-                                        GDK_MODIFIER_INTENT_EXTEND_SELECTION))
+      if (state & GDK_SHIFT_MASK)
         extends = TRUE;
 
       switch (n_press)
index 36449aba41766e81f7fd655e434a56f086d63fc3..3580ab8f8dec1bec33be08cd4d5ac8c8e9b518b2 100644 (file)
@@ -2791,10 +2791,10 @@ get_current_selection_modifiers (GtkWidget *widget,
 
   if (gtk_get_current_event_state (&state))
     {
-      mask = gtk_widget_get_modifier_mask (widget, GDK_MODIFIER_INTENT_MODIFY_SELECTION);
+      mask = GDK_CONTROL_MASK;
       if ((state & mask) == mask)
         *modify = TRUE;
-      mask = gtk_widget_get_modifier_mask (widget, GDK_MODIFIER_INTENT_EXTEND_SELECTION);
+      mask = GDK_SHIFT_MASK;
       if ((state & mask) == mask)
         *extend = TRUE;
     }
@@ -7966,13 +7966,8 @@ gtk_tree_view_real_move_cursor (GtkTreeView       *tree_view,
       GdkModifierType extend_mod_mask;
       GdkModifierType modify_mod_mask;
 
-      extend_mod_mask =
-        gtk_widget_get_modifier_mask (GTK_WIDGET (tree_view),
-                                      GDK_MODIFIER_INTENT_EXTEND_SELECTION);
-
-      modify_mod_mask =
-        gtk_widget_get_modifier_mask (GTK_WIDGET (tree_view),
-                                      GDK_MODIFIER_INTENT_MODIFY_SELECTION);
+      extend_mod_mask = GDK_SHIFT_MASK;
+      modify_mod_mask = GDK_CONTROL_MASK;
 
       if ((state & modify_mod_mask) == modify_mod_mask)
         tree_view->modify_selection_pressed = TRUE;
@@ -9990,9 +9985,7 @@ gtk_tree_view_real_select_cursor_parent (GtkTreeView *tree_view)
        {
           GdkModifierType modify_mod_mask;
 
-          modify_mod_mask =
-            gtk_widget_get_modifier_mask (GTK_WIDGET (tree_view),
-                                          GDK_MODIFIER_INTENT_MODIFY_SELECTION);
+          modify_mod_mask = GDK_CONTROL_MASK;
 
          if ((state & modify_mod_mask) == modify_mod_mask)
            tree_view->modify_selection_pressed = TRUE;
@@ -13686,8 +13679,7 @@ gtk_tree_view_search_key_pressed (GtkEventControllerKey *key,
       return TRUE;
     }
 
-  default_accel = gtk_widget_get_modifier_mask (widget,
-                                                GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR);
+  default_accel = GDK_CONTROL_MASK;
 
   /* select previous matching iter */
   if (keyval == GDK_KEY_Up || keyval == GDK_KEY_KP_Up)
index ac31163805922e67ca67d9c619b78c36ab36e100..5b1f3dc2a5de6e86d84556e7e0d7b544b14df4e5 100644 (file)
@@ -742,7 +742,7 @@ key_pressed (GtkEventController     *controller,
       gboolean search_started;
 
       search_started = gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (wt->priv->search_bar));
-      default_accel = gtk_widget_get_modifier_mask (GTK_WIDGET (wt), GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR);
+      default_accel = GDK_CONTROL_MASK;
 
       if (search_started &&
           (keyval == GDK_KEY_Return ||
index 9f413d0ef17f1bd2a280ba0416c62b7feff2edda..dfc0817abde6b326be6cea2ab84a4b5175e5315a 100644 (file)
@@ -407,7 +407,7 @@ key_pressed (GtkEventController       *controller,
       gboolean search_started;
 
       search_started = gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (sl->priv->search_bar));
-      default_accel = gtk_widget_get_modifier_mask (GTK_WIDGET (sl), GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR);
+      default_accel = GDK_CONTROL_MASK;
 
       if (search_started &&
           (keyval == GDK_KEY_Return ||
index c49a10e72fb9313e78a29162bdee51ab6ac460c5..4c06b28ca0fd443d3dd4f6d8de8b93b91c1edeab 100644 (file)
 #include <locale.h>
 
 static void
-test_one_accel (const char *accel,
-               const char *exp_label,
-               gboolean    has_keysym)
+test_one_accel (const char      *accel,
+                GdkModifierType  exp_mods,
+                guint            exp_key,
+               const char      *exp_label,
+               gboolean         has_keysym)
 {
   guint accel_key;
   GdkModifierType mods;
@@ -47,7 +49,8 @@ test_one_accel (const char *accel,
     }
 
   if (has_keysym)
-    g_assert (accel_key != 0);
+    g_assert (accel_key == exp_key);
+  g_assert (mods == exp_mods);
   g_assert (keycodes);
   g_assert (keycodes[0] != 0);
 
@@ -72,49 +75,49 @@ test_one_accel (const char *accel,
 static void
 accel1 (void)
 {
-  test_one_accel ("0xb3", "0xb3", FALSE);
+  test_one_accel ("0xb3", 0, 0xb3, "0xb3", FALSE);
 }
 
 static void
 accel2 (void)
 {
-  test_one_accel ("<Primary><Alt>z", "Ctrl+Alt+Z", TRUE);
+  test_one_accel ("<Control><Alt>z", GDK_CONTROL_MASK|GDK_ALT_MASK, GDK_KEY_z, "Ctrl+Alt+Z", TRUE);
 }
 
 static void
 accel3 (void)
 {
-  test_one_accel ("KP_7", "7", TRUE);
+  test_one_accel ("KP_7", 0, GDK_KEY_KP_7, "7", TRUE);
 }
 
 static void
 accel4 (void)
 {
-  test_one_accel ("<Primary>KP_7", "Ctrl+7", TRUE);
+  test_one_accel ("<Control>KP_7", GDK_CONTROL_MASK, GDK_KEY_KP_7, "Ctrl+7", TRUE);
 }
 
 static void
 accel5 (void)
 {
-  test_one_accel ("<Shift>exclam", "Shift+!", TRUE);
+  test_one_accel ("<Shift>exclam", GDK_SHIFT_MASK, GDK_KEY_exclam, "Shift+!", TRUE);
 }
 
 static void
 accel6 (void)
 {
-  test_one_accel ("<Hyper>x", "Hyper+X", TRUE);
+  test_one_accel ("<Hyper>x", GDK_HYPER_MASK, GDK_KEY_x, "Hyper+X", TRUE);
 }
 
 static void
 accel7 (void)
 {
-  test_one_accel ("<Super>x", "Super+X", TRUE);
+  test_one_accel ("<Super>x", GDK_SUPER_MASK, GDK_KEY_x, "Super+X", TRUE);
 }
 
 static void
 accel8 (void)
 {
-  test_one_accel ("<Meta>x", "Meta+X", TRUE);
+  test_one_accel ("<Meta>x", GDK_META_MASK, GDK_KEY_x, "Meta+X", TRUE);
 }
 
 static void